Add HTML tags around GWT widgets

177 views
Skip to first unread message

Thomas Dvornik

unread,
Jul 22, 2010, 6:16:10 PM7/22/10
to Google Web Toolkit
Hello,

I'm creating an application that parses XML. After parsing, the
corresponding widgets gets created and added to the page. To provide
more customization, a user can include XHTML tags for formatting.
These tags should go directly to the page in the spot they were
specified. For example, lets say I have a "button" tag and the user
writes:

<b> <lab:button name="Run Me" evaluate="MyEvaluator"> </b>

the HTML should look something like

<b> <GWT button widget code> </b>

My first attempt was to do the following.

dBox.add(new HTML("<"+tagName+">"));
dBox.add(button);
dBox.add(new HTML("</"+tagName+">"));

GWT, in the case where the tagName is "b", produces

<div class="GWT-html"> <b></b> <div>
<GWT button widget code>

Since then, I also tried overwriting methods and classes, turning
everything into HTML then adding one HTML widget, and some other
unsuccessful approaches. I don't want to write the GWT button code by
hand, because that defeats the purpose of using GWT. Plus I am using a
lot more widgets then just buttons.

Does anyone know a solution to this problem or can get me pointed in
the right direction. It seems the simplest solution is to stop GWT
from creating the additional div tag. Ideally, the solution would also
work for SmartGWT, although I'll take anything at this point.

Thanks!

Tom

cokol

unread,
Jul 23, 2010, 3:58:46 AM7/23/10
to Google Web Toolkit
hi, so what you want is actually NOT that user-written XML directly is
injected into the DOM, rather you're about to create an own UiBinder?
So, if someone writes the code

<b><lab:button name="Run Me" evaluate="MyEvaluator"/></b>

you want to map the <lab:button/> element to the GWT-Button widget,
right? - start using UiBinder :-)
if you want to handle it absolutely dynamically, so - <lab:button/>
would really cause a DOM.addWidget(new Button()) then you have to
extend all of GWT widgets you want to support and override the
getElement() method - this would be the DOM element the widget appends
its own code to. So you can control it then

Thomas Dvornik

unread,
Jul 23, 2010, 2:00:31 PM7/23/10
to Google Web Toolkit
Thanks for the reply!

I don't think UIBinder is quite what I'm looking for. The XML has to
validate against a RelaxNG definition. Also, after a lab gets parsed
into a structure, it gets stored in a database, and uses that data to
create the views. The data also gets used in other ways than just UI.

I can't seem to get your other suggestion working, if I understood
correctly. Here is my attempt assuming I want a button wrapped in a
<b> tag.

public class MyButton extends Button {
private final Element e = (Element)
Document.get().createElement("b");

public MyButton(String name) {
super(name);
}

@Override
public Element getElement() {
return e;
}
}

Then add it,

MyButton button = new MyButton("Run");
RootPanel.get("myButtonContainer").add(button);

And it produces

<b tabindex="0"></b>

A normal button produces

<button type="button" class="gwt-Button">Run</button>

I also tried the approach from http://osdir.com/ml/GoogleWebToolkit/2009-05/msg01379.html
with no luck, although same concept.

Thanks,

Tom

Jeff Chimene

unread,
Jul 25, 2010, 10:57:52 AM7/25/10
to google-we...@googlegroups.com
You might consider creating the HTML on your server via XSL. You transform the XML to HTML code either on the server or on the client. Your call.


--
You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
To post to this group, send email to google-we...@googlegroups.com.
To unsubscribe from this group, send email to google-web-tool...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.


Reply all
Reply to author
Forward
0 new messages